package vip.xiaonuo.invoice.core.adapter;

import vip.xiaonuo.invoice.core.adapter.dto.request.InvoiceRedeliverRequestDto;
import vip.xiaonuo.invoice.core.adapter.dto.request.InvoiceRequestDto;
import vip.xiaonuo.invoice.core.adapter.dto.request.RedInvoiceRequestDto;
import vip.xiaonuo.invoice.core.adapter.dto.result.*;

import java.util.List;

/**
 * 发票平台适配器接口
 *
 * @author AI Assistant
 */
public interface InvoicePlatformAdapter {

    /**
     * 开具蓝票
     *
     * @param invoiceRequestDto 开票请求参数
     * @return 开票请求提交结果
     */
    InvoiceSubmitResultDto createInvoice(InvoiceRequestDto invoiceRequestDto);

    /**
     * 开具红票
     *
     * @param redInvoiceRequestDto 开票请求参数
     * @return 开票请求提交结果
     */
    RedInvoiceSubmitResultDto createRedInvoice(RedInvoiceRequestDto redInvoiceRequestDto);


    /**
     * 查询发票状态
     *
     * @param ids 发票ID
     * @return 发票结果
     */
    InvoiceResultDto queryInvoiceStatus(String sellerId, List<String> ids);

    /**
     * 查询红票状态
     *
     * @param sellerId 销方ID
     * @param redInvoiceConfirmIds 红票确认单ID
     * @return 发票结果
     */
    RedInvoiceResultDto queryRedInvoiceStatus(String sellerId, List<String> redInvoiceConfirmIds);

    /**
     * 重新交付发票
     *
     * @param redeliverRequestDto 重新交付请求参数
     * @return 重新交付结果
     */
    RedeliverResultDto reDeliverInvoice(InvoiceRedeliverRequestDto redeliverRequestDto);

    /**
     * 获取验证码
     *
     * @param sellerId 商户Id
     * @return 验证码请求结果
     */
    GetValidSubmitResultDto getValidCode(String sellerId);

    /**
     * 提交验证码
     *
     * @param sellerId 商户Id
     * @return 验证码提交结果
     */
    CommitValidSubmitResultDto commitValidCode(String sellerId,String validCode);

}
